/**
 * @description 日期转换 过滤器
 * @author wangxin
 * @version 1.0
 */
class DateTimeConverter {
  /** 日期格式字符串转为时间戳
   * @param {string} text 日期格式字符串,例如2015年10月29日,2015-10-29 14:00:36
   * @returns {number}
   */
  stringToUTC(text) {
    return new Date(text.replace(/-/g, '/')).getTime();
  }
  /** 时间戳转为日期格式字符串
   * @param {number} timestamp 时间戳字符串,例如123121234123
   * @param {string} format 日期格式字符串
   * @returns {string} 基于format的日期
   */
  utcToString(timestamp, format = "yyyy-MM-dd") {
    if (!timestamp || timestamp == "0") {
      return "";
    }
    let scale = String(timestamp).length == 13 ? 1 : 1000;
    return this.dateformat(new Date(parseInt(timestamp) * scale), format);
  }
  /**
   * 对Date的扩展，将 Date 转化为指定格式的String
   * 月(M)、日(d)、12小时(h)、24小时(H)、分(m)、秒(s)、周(E)、季度(q) 可以用 1-2 个占位符
   * 年(y)可以用 1-4 个占位符，毫秒(S)只能用 1 个占位符(是 1-3 位的数字)
   * @example
   * dateformat(new Date())("yyyy-MM-dd hh:mm:ss.S") -> 2006-07-02 08:09:04.423
   * dateformat(new Date())("yyyy-MM-dd E HH:mm:ss") -> 2009-03-10 二 20:09:04
   * dateformat(new Date())("yyyy-MM-dd EE hh:mm:ss") -> 2009-03-10 周二 08:09:04
   * dateformat(new Date())("yyyy-MM-dd EEE hh:mm:ss") -> 2009-03-10 星期二 08:09:04
   * dateformat(new Date())("yyyy-M-d h:m:s.S") -> 2006-7-2 8:9:4.18
   */
  dateformat(date, format = "yyyy-MM-dd") {
    var o = {
      "M+": date.getMonth() + 1, // 月份
      "d+": date.getDate(), // 日
      "h+": date.getHours() % 12 == 0 ? 12 : date.getHours() % 12, // 小时
      "H+": date.getHours(), // 小时
      "m+": date.getMinutes(), // 分
      "s+": date.getSeconds(), // 秒
      "q+": Math.floor((date.getMonth() + 3) / 3), // 季度
      "S": date.getMilliseconds() // 毫秒
    };
    var week = {
      "0": "日",
      "1": "一",
      "2": "二",
      "3": "三",
      "4": "四",
      "5": "五",
      "6": "六"
    };
    if (/(y+)/.test(format)) {
      format = format.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
    }
    if (/(E+)/.test(format)) {
      format = format.replace(RegExp.$1, ((RegExp.$1.length > 1) ? (RegExp.$1.length > 2 ? "星期" : "周") : "") + week[date.getDay() + ""]);
    }
    for (var k in o) {
      if (new RegExp("(" + k + ")").test(format)) {
        format = format.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
      }
    }
    return format;
  }
  /**
   * 时间转为秒
   * @param {string} time 时间(00:00:00)
   * @returns {string} 时间戳（单位：秒）
   */
  timeToUTC(time) {
    var s = '';

    var hour = time.split(':')[0];
    var min = time.split(':')[1] || 0;
    var sec = time.split(':')[2] || 0;

    s = Number(hour * 3600) + Number(min * 60) + Number(sec);
    s = s - 8 * 3600;
    return s;
  }
}
const converter = new DateTimeConverter();

export function utc(text, format = 'yyyy-MM-dd hh:mm:ss') {
  return converter.utcToString(text, format)
}
export function date(text, format = 'yyyy-MM-dd hh:mm:ss') {
  return converter.dateformat(new Date(text), format)
}
